<?php
/**
 * UseradminController
 * 
 * @author
 * @version 
 */
require_once 'Zend/Controller/Action.php';
class Admin_UserAdminController extends Sunnet_Controller_Action
{
	var $_arrParam;
	public function init()
    {
//    	Truyền các tham số nhận được ra view
    	$this->_arrParam = $this->_request->getParams();
    	$this->view->arrParam = $this->_arrParam;
    	if (empty($this->_arrParam['page'])) {
    		$this->_arrParam['page'] = 1;
    	}
    	if (empty($this->_arrParam['line_per_page'])) {
    		$this->_arrParam['line_per_page'] = 10;
    	}
         Zend_Loader::loadClass('Admin_Models_MenuModel');
         $db = new Admin_Models_MenuModel();
         $mainmenu = $db->loadmainmenu();
         $this->view->mainmenu = $mainmenu; 
    }

    public function preDispatch(){
		$template_path = TEMPLATE_PATH . "/admin/default/";
		$this->loadTemplate($template_path,'template.ini','template');
    	$auth = Zend_Auth::getInstance();
    	if (!$auth->hasIdentity() || !$auth->getIdentity()->admin) {
    		$this->_forward('login','index','admin');//,$this->_arrParam);
    	}
    }
    /**
     * The default action - show the home page
     */
    public function indexAction ()
    {
    	
//    	Khai báo biến

    	$db = Zend_Registry::get('connectDB');
    	$this->setPagination($db->select()->from('user_admin',array('id','username','name')), $this->_arrParam);
    }
    function generateCode($characters) {
		// $characters = how many digits or characters to return.
		// You can use any set of characters you want.
		$possible = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
		$code = '';
		$i = 0;
		while ($i < $characters) { 
			$code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
			$i++;
		}
		return $code;
	}
        public function changePasswordAction(){
//		Load form và model sử dụng trong action

		Zend_Loader::loadClass('Admin_Forms_ChangePasswordForm');
		Zend_Loader::loadClass('Admin_Models_UserAdminModel');
		
//		Khai báo biến

		$model = new Admin_Models_UserAdminModel();
		$form = new Admin_Forms_ChangePasswordForm(array('submit'	=> 'Sửa'));
		$auth = Zend_Auth::getInstance();
//		Kiểm tra action có phải là post không

		if ($this->_request->isPost()){
			
//			Kiểm tra xem password nhập vào có đạt yêu cầu chưa

			if ($form->isValid($this->_arrParam)){
				$data = $form->getValues();
				
//				Kiểm tra hai trường password có trùng nhau không

				$where = $model->getAdapter()->quoteInto('id = ?', $auth->getIdentity()->id);
				$user_info = $model->fetchRow($where);
				if (sha1($data['password']) == $user_info->password){
					if ($data['new_password'] == $data['re_password']) {
						$model->update(array('password'	=> sha1($data['new_password'])), $where);
						$this->_redirect('/admin');
					}else{
						$re_pass_element = $form->getElement('re_password');
						$re_pass_element->addError('Hai trường mật khẩu phải giống nhau');
	
						$form->addElement($re_pass_element,'re_password');
					}
				}else{
					$pass_element = $form->getElement('password');
					$pass_element->addError('Mật khẩu không đúng');

					$form->addElement($pass_element,'password');
				}
			}
		}
		
//		truyền biến ra view
		
		$this->view->form = $form;
	}
    public function addAction(){
//    	Load model sử dụng trong action

    	Zend_Loader::loadClass('Admin_Forms_UserAdminForm');
    	Zend_Loader::loadClass('Admin_Models_UserAdminModel');
        Zend_Loader::loadClass('Admin_Models_UserInfoModel');
//    	Khai báo biến

    	$form = new Admin_Forms_UserAdminForm(array('submit'	=> 'Thêm','cancel_link'	=> '/admin/user-admin'));
    	$model = new Admin_Models_UserAdminModel();
        $model_info = new Admin_Models_UserInfoModel();
//    	Nếu action là post thì thực hiện thêm nhà phát hành
        $validator1 = new Zend_Validate_Db_RecordExists(
                                array(
                                    'table' => 'user_admin',
                                    'field' => 'UserID'
                                )
        );
        do{
            $code = $this->generateCode(10);
        }while ($validator1->isValid($code));

    	if ($this->_request->isPost()){
    		
//    		Kiểm tra dữ liệu nhập vào đã thỏa hết các điều kiện chưa

    		if ($form->isValid($this->_arrParam)){
    			try {
    				$validator = new Zend_Validate_Db_NoRecordExists(
					    array(
					        'table'   => 'user_admin',
					        'field'   => 'username'
					    )
					);
					$data = $form->getValues();
					if ($validator->isValid($data['username'])){

                                                         $data['password'] = sha1($data['password']);
                                                         $data['UserID'] = $code;
                                                         $model->insert($data);

                                                //add vao data user info
                                                        $data_info['Username'] = $data['name'];
                                                        $data_info['UserID'] = $data['UserID']; 
                                                        $data_info['Email'] = $data['email']; 

                                                        $model_info->insert($data_info);


                                                         $this->_redirect('/admin/user-admin');                               
					}else{
						$username_element = $form->getElement('username');
						$username_element->addError("Tài khoản đã tồn tại");
						$form->addElement($username_element,'username');
					}
                                
    			} catch (Exception $e) {
    				echo $e;
    			}
    		}
    	}
//    	Truyền biến ra view

    	$this->view->form = $form;
    }
    public function editAction(){
//    	Load model sử dụng trong action

    	Zend_Loader::loadClass('Admin_Forms_UserAdminForm');
    	Zend_Loader::loadClass('Admin_Models_UserAdminModel');
    	
//    	Khai báo biến

    	$form = new Admin_Forms_UserAdminForm(array('submit'	=> 'Sửa','cancel_link'	=> '/admin/user-admin'));
    	$model = new Admin_Models_UserAdminModel();
		$where = $model->getAdapter()->quoteInto('id = ?', $this->_arrParam['id']);
    	
//    	Nếu action là post thì thực hiện sửa nhà phát hành
        if (!$this->_arrParam['id']){
    		$this->_redirect('/admin/user-admin');
    	}
    	if ($this->_request->isPost()){
    		
//    		Kiểm tra dữ liệu nhập vào đã thỏa hết các điều kiện chưa

    		if ($form->isValid($this->_arrParam)){
    			try {
    				
//    				Update dữ liệu

    				$model->update($form->getValues(),$where);
    				$this->_redirect('/admin/user-admin');
    			} catch (Exception $e) {
    				echo $e;
    			}
    		}
    	}else{
	    	$cp_info = $model->fetchRow($where);
	    	$form->setDefaults($cp_info->toArray());
    	}
//    	Truyền biến ra view

    	$this->view->form = $form;
    	$this->render('add');
    }
    public function deleteAction(){
//    	Load model sử dụng trong action

    	Zend_Loader::loadClass('Admin_Models_UserAdminModel');
    	
//    	Khai báo biến

    	$model = new Admin_Models_UserAdminModel();
		$where = $model->getAdapter()->quoteInto('id = ?', $this->_arrParam['id']);
    	
//		Tắt view

		$this->_helper->viewRenderer->setNoRender();
//    	Xóa record

		try {
    		$model->delete($where);
    		$this->_redirect('/admin/user-admin');
    	} catch (Exception $e) {
    		echo $e;
    	}
    }
    
}
